package com.example.socket;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;

@Component
@ServerEndpoint(value = "/websocket/{userId}")
//@ServerEndpoint() 声明webSocket地址其中{}表示带连接的参数，如果需要获取{}的参数在参数列表里增加@PathParam("paraName")Integer userid
public class Test {


    private Logger logger = LoggerFactory.getLogger(Test.class);

    private static String userId;

    @OnOpen
    // 有连接时的触发函数，可以在用户连接时记录用户带的参数，只需要在参数列表添加@PathParam
    public void onOpen(Session session, @PathParam("userId")String userId){
        this.userId = userId;
        System.out.println("新连接");
        logger.info("有新的连接="+this.userId);
    }

    @OnClose
    //关闭连接调用的方法
    public void onClose(){
        logger.info("有连接关闭="+this.userId);
    }

    @OnMessage
    //收到消息时候调用
    public void onMessage(Session session, String message) throws IOException {
        logger.info("接收到用户"+this.userId+"的消息"+message);
        session.getBasicRemote().sendText("服务器收到消息"+message); // 回复用户
    }


    @OnError
    //发生错误的时候调用
    public void onError(Session session, Throwable error){
        logger.info("当前用户连接发生错误"+this.userId);
        logger.error("错误是="+error);
        error.printStackTrace();
    }

}
